﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace SimulationPresenter.Presentation.Primitives
{
    internal interface IPresentationPrimitive : IPresentationBase
    {
        /// <summary>
        /// Defines format of vertices used by Primitive
        /// </summary>
        VertexFormats CustomVertexFormat { get; }

        /// <summary>
        /// Gets array of verices in given format
        /// </summary>
        /// <typeparam name="T">One of <b>CustomVertex</b> structures</typeparam>
        /// <returns></returns>
        T[] GetVertices<T>() where T : struct;

        /// <summary>
        /// Gets array of vectors that define position of vertices
        /// </summary>
        /// <returns></returns>
        Vector3[] GetPositions();

        /// <summary>
        /// Sets <b>NEW</b> positions of vertices by defining array of vectors
        /// </summary>
        /// <param name="vertexes"></param>
        void SetPositions(Vector3[] vectors);

        /// <summary>
        /// Gets array of indices that define structure of primitive
        /// </summary>
        short[] Indices { get; }

        /// <summary>
        /// Gets scale which should be applied when drawing primitive
        /// </summary>
        float scale { get; }

        /// <summary>
        /// Gets Material of primitive
        /// </summary>
        Material Material { get; }

        /// <summary>
        /// Gets Texture of primitive
        /// </summary>
        Texture Texture { get; }

        Color Color { get; set; }

        Vector3[] GetPositionsWithScale();

        bool UseScale { get; set; }
    }
}
